package com.example.music_player

import android.app.AlertDialog
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.example.music_player.data.AppDatabase
import com.example.music_player.data.User
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

/**
 * 用户列表适配器
 * 用于在 RecyclerView 中显示用户列表
 * @param context 上下文
 * @param userList 用户列表数据
 */
class UserAdapter(private val context: Context, private var userList: List<User>) : RecyclerView.Adapter<UserAdapter.UserViewHolder>() {

    /**
     * ViewHolder 类，用于缓存 item 视图中的控件引用
     * @param itemView 列表项视图
     */
    class UserViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        // 昵称文本视图
        val nicknameTextView: TextView = itemView.findViewById(R.id.tv_nickname)
        // 用户名文本视图
        val usernameTextView: TextView = itemView.findViewById(R.id.tv_username)
        // 删除按钮
        val deleteButton: Button = itemView.findViewById(R.id.btn_delete)
    }

    /**
     * 创建 ViewHolder
     * @param parent 父视图组
     * @param viewType 视图类型
     * @return 返回创建的 ViewHolder
     */
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.user_item, parent, false)
        return UserViewHolder(view)
    }

    /**
     * 绑定数据到 ViewHolder
     * @param holder ViewHolder 实例
     * @param position 当前项在列表中的位置
     */
    override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
        val user = userList[position]
        // 设置用户名和昵称
        holder.usernameTextView.text = user.username
        holder.nicknameTextView.text = user.nickname

        // 设置删除按钮点击事件
        holder.deleteButton.setOnClickListener {
            showDeleteConfirmationDialog(user)
        }
    }

    /**
     * 获取列表项数量
     * @return 返回列表大小
     */
    override fun getItemCount(): Int {
        return userList.size
    }

    /**
     * 显示删除确认对话框
     * @param user 要删除的用户对象
     */
    private fun showDeleteConfirmationDialog(user: User) {
        AlertDialog.Builder(context)
            .setMessage("确定删除吗？")
            .setPositiveButton("是") { dialog, which -> deleteUser(user) }
            .setNegativeButton("否") { dialog, which -> dialog.dismiss() }
            .show()
    }

    /**
     * 删除用户
     * @param user 要删除的用户对象
     */
    private fun deleteUser(user: User) {
        // 在 IO 线程中执行数据库操作
        CoroutineScope(Dispatchers.IO).launch {
            val userDao = AppDatabase.getDatabase(context).userDao()
            // 从数据库中删除用户
            userDao.deleteUser(user)
            // 更新列表数据
            userList = userList.filter { it.id != user.id }
            // 在主线程中更新 UI
            (context as AdminActivity).runOnUiThread {
                notifyDataSetChanged()
                Toast.makeText(context, "用户已删除", Toast.LENGTH_SHORT).show()
            }
        }
    }
}
